/**
 * test-class of "Lagerverwaltung"
 * 
 * @author Konrad Paumann
 * @author Bernhard Denner
 * @author Maximilian Csuk 
 * 
 * $Revision: 53 $
 * $Date: 2007-10-18 00:07:25 +0000 (Thu, 18 Oct 2007) $
 *
 */
import java.util.*;

public class Test {
	
	/**
	 *  constructor of test-class
	 */
	public Test() {
		// constructor
	}
	
	public void testWarehouseManagement() {
		// Testing the WarehouseManagement
		WarehouseManagement hofer = new WarehouseManagement();
		Product p;
		
		// 11 test cases for testing class WarehouseManagement and Product
		
		System.out.println("TEST 1: 2 gueltige Produkte einlesen und ausgeben:");
		try {
			hofer.addProduct("SCHUH 1345", "Herrenschuh GRAZIE", 800, 20);
			hofer.addProduct("TSHIRT 123", "T-Shirt KURT XL", 200, 30);
		} catch (ProductException e) {
			e.printStackTrace();
		}
		hofer.listProducts();

		
		System.out.println();
		System.out.println("TEST 2: Produkt mit zulanger Kurzbeschreibung einlesen:");
		try {
			hofer.addProduct("KAPPE 12345", "Kappale", 5000, 10);
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		
		System.out.println();
		System.out.println("TEST 3: Produkt mit zukurzer Kurzbeschreibung einlesen:");
		try {
			hofer.addProduct("KAPPE 123", "Kappale", 5000, 10);
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		
		System.out.println();
		System.out.println("TEST 4: ungueltiges Zeichen in der Kurzbeschreibung:");
		try {
			hofer.addProduct("KAPPE_1235", "Kappale", 5000, 10);
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		
		System.out.println();
		System.out.println("TEST 5: Menge eines Produkts absolut und relativ aendern:");
		try {
			p = hofer.getElement("SCHUH 1345");
			p.setAmount(200);
			p.printDetails();
			p.alterAmount(-50);
			p.printDetails();
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		System.out.println();
		System.out.println("TEST 6: ungueltige absolute Mengenaenderung:");
		try {
			p = hofer.getElement("SCHUH 1345");
			p.setAmount(-10);
			p.printDetails();
		} catch (ProductException e) {
			e.printStackTrace();
		}

		System.out.println();
		System.out.println("TEST 7: ungueltige relative Mengenaenderung:");
		try {
			p = hofer.getElement("SCHUH 1345");
			p.alterAmount(-10000);
			p.printDetails();
		} catch (ProductException e) {
			e.printStackTrace();
		}

		
		System.out.println();
		System.out.println("TEST 8: Preis eines Produkts auslesen:");
		try {
			p = hofer.getElement("TSHIRT 123");
			System.out.println("Preis fuer das TShirt: " + p.getPrice());
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		
		System.out.println();
		System.out.println("TEST 9: Zugriff auf ein nicht existentes Produkt:");
		try {
			p = hofer.getElement("GIBTSNICHT");
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		System.out.println();
		System.out.println("TEST 10: Produkt mit bereits existierender Kurzbeschreibung einlesen:");
		try {
			hofer.addProduct("TSHIRT 123", "T-Shirt M rot", 3000, 10);
		} catch (ProductException e) {
			e.printStackTrace();
		}
		
		System.out.println();
		System.out.println("TEST 11: Sortimentiteration:");
		Iterator<Product> it = hofer.getProductIterator();	
		while (it.hasNext()) {
			it.next().printDetails();
		}
		
		System.out.println();
		System.out.println("alle Test beendet ;)");
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test t = new Test();
		t.testWarehouseManagement();
	}
}
